package com.qyx.pmpucat.controller;

import com.mybatisflex.core.paginate.Page;
import com.qyx.pmpucat.common.result.Result;
import com.qyx.pmpucat.common.result.Results;
import com.qyx.pmpucat.dto.QuestionnaireDTO;
import com.qyx.pmpucat.dto.QuestionnaireListResponseDTO;
import com.qyx.pmpucat.dto.QuestionnaireQueryDTO;
import com.qyx.pmpucat.entity.Questionnaire;
import com.qyx.pmpucat.entity.base.Options;
import com.qyx.pmpucat.service.QuestionnaireService;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 问卷控制器
 */
@RestController
@RequestMapping("/questionnaire")
@RequiredArgsConstructor
@Validated
public class QuestionnaireController {

    private final QuestionnaireService questionnaireService;

    /**
     * 创建问卷
     */
    @PostMapping("/create")
    public Result<Long> createQuestionnaire(@RequestBody @Valid QuestionnaireDTO questionnaireDTO) {
        Long id = questionnaireService.createQuestionnaire(questionnaireDTO);
        return Results.success(id);
    }

    /**
     * 更新问卷
     */
    @PutMapping("/update")
    public Result<Void> updateQuestionnaire(@RequestBody @Valid QuestionnaireDTO questionnaireDTO) {
        questionnaireService.updateQuestionnaire(questionnaireDTO);
        return Results.success();
    }

    /**
     * 删除问卷
     */
    @DeleteMapping("/{id}")
    public Result<Void> deleteQuestionnaire(@PathVariable Long id) {
        questionnaireService.deleteQuestionnaire(id);
        return Results.success();
    }

    /**
     * 获取问卷详情
     */
    @GetMapping("/{id}")
    public Result<Questionnaire> getQuestionnaireDetail(@PathVariable Long id) {
        Questionnaire result = questionnaireService.getQuestionnaireDetail(id);
        return Results.success(result);
    }

    /**
     * 分页查询问卷列表
     */
    @PostMapping("/page")
    public Result<Page<QuestionnaireListResponseDTO>> getQuestionnairePage(@RequestBody QuestionnaireQueryDTO queryDTO) {
        Page<QuestionnaireListResponseDTO> result = questionnaireService.getQuestionnairePage(queryDTO);
        return Results.success(result);
    }

    /**
     * 下拉所有问卷
     */
    @GetMapping("/drop")
    public Result<List<Options>> dropQuestionnaire() {
        return Results.success(questionnaireService.dropQuestionnaire());
    }


} 